// pageB/pages/loading/loading.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    btn:null,
    order_id:null,
    token:'',
    checkInDate:'',
    checkOutDate:'',
    OrderMessage:[],
    PaymentMessage:[],
    RoomMessage:[],
    timeLeft: '30:00',  // 初始显示 30 分钟
    timer: null,  // 用来存储 setInterval 返回的定时器 ID
    newTime: '',  // 用来显示延后半小时的时间
    stay:null,
    transaction_id:'',  //订单编号
    name:'',
    phone:'',
    messageImg:[],
    imageUrls:[],
    showModalFlag: false,  // 控制弹窗显示和隐藏
  },
  showModal:function () { // 显示弹窗
    var that =this
    // 获取房间图片
    wx.request({
      url: `http://hotel.ttt:3007/api/getImages/${that.data.RoomMessage.room_id}`, 
      success(res) {
        // 在小程序页面展示这些图片
        that.setData({
          imageUrls: res.data.data
        });
      }
    });
    // 获取房间详情图片
    wx.request({
      url: `http://hotel.ttt:3007/api/getMessage/${that.data.RoomMessage.room_id}`, 
      success(res) {
        // 在小程序页面展示这些图片
        that.setData({
          messageImg: res.data.data
        });
      }
    })
    const animation = wx.createAnimation({
      duration: 5000,  // 动画持续时间
      timingFunction: 'ease-in-out'  // 动画过渡方式
    });

    // 让弹窗从屏幕外部（底部）滑入
    animation.translateY(-500).step(); // 初始位置在屏幕底部外500px

    that.setData({
      showModalFlag: true,
      animation: animation.export()
    });

    // 延时滑动到屏幕底部
    setTimeout(() => {
      const slideInAnimation = wx.createAnimation({
        duration: 300,
        timingFunction: 'ease-in-out'
      });

      // 弹窗滑动到屏幕底部
      slideInAnimation.translateY(0).step();

      this.setData({
        animation: slideInAnimation.export()
      });
    }, 300);  // 延时执行
  },
  closeModal:function() {  // 关闭弹窗
    const animation = wx.createAnimation({
      duration:300,
      timingFunction: 'ease-in-out'
    });

    // 弹窗滑动到屏幕下方
    animation.translateY(500).step();

    this.setData({
      animation: animation.export()
    });

    // 动画结束后隐藏弹窗
    setTimeout(() => {
      this.setData({
        showModalFlag: false
      });
    }, 300); // 动画持续时间后隐藏
  },
  updataInfo:function(){
    wx.navigateTo({
      url: '/pageB/pages/info/info?user_id='+this.data.OrderMessage.user_id,
    })
  },
  getOrderMessage:function(){
    var that=this
    wx.request({
      url: `http://hotel.ttt:3007/protected/orderMessage/${that.data.order_id}`,
      method:'get',
      header:{
        'Authorization': that.data.token// 将 token 添加到请求头
      },
      success:function(res){
        if(res.data.success){
          console.log('订单查询成功',res.data.data[0])
          that.setData({
            OrderMessage:res.data.data[0],
            checkInDate:res.data.data[0].check_in_date.substring(0,10),
            checkOutDate:res.data.data[0].check_out_date.substring(0,10),
          })
          that.getRoomMessage(res.data.data[0].room_id)
          const stay = that.getDaysBetween(res.data.data[0].check_in_date.substring(0,10), res.data.data[0].check_out_date.substring(0,10))
          that.setData({
            stay:stay
          })
        }else{console.log(res.data);}
      },
      fail(err) {
        console.error('失败', err);
      }
    })
  },
  getPaymentMessage:function(){
    var that=this
    wx.request({
      url: `http://hotel.ttt:3007/protected/paymentMessage/${that.data.order_id}`,
      method:'get',
      header:{
        'Authorization': that.data.token// 将 token 添加到请求头
      },
      success:function(res){
        if(res.data.success){
          console.log('订单支付查询成功',res.data.data[0])
          wx.setNavigationBarTitle({
            title: `订单: ${res.data.data[0].transaction_id.substring(25, 40)}`
          });
          that.setData({
            PaymentMessage:res.data.data[0],
            transaction_id:res.data.data[0].transaction_id.substring(25, 40)
          })
        }else{console.log(res.data);}
      },
      fail(err) {
        console.error('失败', err);
      }
    })
  },
  getRoomMessage:function(e){
    var that =this
    console.log(e);
    wx.request({
      url: `http://hotel.ttt:3007/protected/roomMessage/${e}`,
      method:'GET',
      header:{
        'Authorization': that.data.token// 将 token 添加到请求头
      },
      success:function(res){
        if(res.data.success){
          console.log('查询成功',res.data.data[0])
          that.setData({
            RoomMessage:res.data.data[0]
          })
        }else{
          console.log('查询失败',res.data)
        }
      },
      fail:function(err){
        console.log(err);
      }
    })
  },
  getuserinfo:function (e) { //获取用户表里的电话和姓名
    var that =this
    wx.request({
      url: `http://hotel.ttt:3007/protected/getuserinfo/${e}`,
      method:'GET',
      header:{
        'Authorization': that.data.token 
      },
      success(res) {
        console.log(res.data.data[0].full_name);
        that.setData({
          name:res.data.data[0].full_name,
          phone:res.data.data[0].phone_number,
        })
      }
    })
  },
  getDaysBetween(inDate,outDate){ //一共住几天
    let startDate = Date.parse(inDate);
    let endDate = Date.parse(outDate);
    let days=(endDate - startDate)/(1*24*60*60*1000);
    return  days;
  },
   startCountdown() {  // 启动倒计时
    let time = 30 * 60; // 30 分钟转化为秒数
    this.setData({ timeLeft: this.formatTime(time) });  // 设置初始时间显示

    // 每秒更新一次倒计时
    const timer = setInterval(() => {
      time--;  // 每次减少 1 秒
      this.setData({ timeLeft: this.formatTime(time) });  // 更新显示

      if (time <= 0) {
        clearInterval(timer);  // 倒计时结束，清除定时器
        this.onCountdownEnd();  // 倒计时结束，执行函数
      }
    }, 1000);

    this.setData({ timer: timer });  // 保存定时器 ID
  },
  formatTime(seconds) { // 格式化时间：秒数 -> "mm:ss" 格式
    const minutes = Math.floor(seconds / 60);
    const remainingSeconds = seconds % 60;
    return `${this.padZero(minutes)}:${this.padZero(remainingSeconds)}`;
  },
  padZero:function(num) {  // 补零函数，确保两位数格式
    return num < 10 ? '0' + num : num;
  },
  getDelayedTime() {// 获取当前时间延后半小时
    const currentTime = new Date();  // 获取当前时间
    currentTime.setMinutes(currentTime.getMinutes() + 30);  // 将当前时间加上 30 分钟

    const hours = currentTime.getHours();  // 获取小时部分
    const minutes = currentTime.getMinutes();  // 获取分钟部分

    // 格式化为 "HH:MM" 形式
    const formattedTime1 = this.formatTime1(hours, minutes);
    this.setData({ newTime: formattedTime1 });  // 更新 data 中的 newTime
  },
  formatTime1(hours, minutes) {// 格式化时间为两位数
    const hoursStr = hours < 10 ? '0' + hours : hours;  // 小于 10 的小时补零
    const minutesStr = minutes < 10 ? '0' + minutes : minutes;  // 小于 10 的分钟补零
    return `${hoursStr}:${minutesStr}`;
  },
  onCountdownEnd:function() {   // 倒计时结束后执行的函数
    this.cancel()
  },
  wxpay:function(){
    var that=this 
    wx.request({
      url: 'http://hotel.ttt:3007/protected/usedOrder',
      method: 'post',  // 请求方法是 GET
      header:{
        'Authorization': that.data.token// 将 token 添加到请求头
      },
      data:{
        payment_status:'paid',
        order_status:'confirmed',
        order_id:that.data.order_id
      },
      success: function (res) {
        console.log(res.data.message)
        that.updatePaymentStatus('successful')

      },
      fail: function (err) {
        console.error('请求失败:', err);
      }
    })
  },
  updatePaymentStatus:function(e){
    wx.request({
      url: `http://hotel.ttt:3007/protected/usedPayment/${e}/${this.data.order_id}`,
      method:'POST',
      header:{
        'Authorization': this.data.token// 将 token 添加到请求头
      },
      success: function (res) {
        if(res.data.success)console.log(res.data.message)
        else console.log('更新状态失败',res.data)
      },
      fail: function (err) {
        console.error('请求失败:', err);
      }
    })
  },
  updataRoomStatus:function(e){
    wx.request({
      url: `http://hotel.ttt:3007/api/usedRoom/${e}/${that.data.OrderMessage.room_id}`,
      method: 'post',  // 请求方法是 GET
      success:function(res){
        if(res.data.success) console.log('更新房间状态成功');
        else console.log('更新房间状态失败');
      },fail:function(err){
        console.log(err);
      }
    })
  },
  gotopay:function(){
    var that = this
    wx.showModal({
      title: '提示',  // 弹窗的标题
      content: `请支付房费￥${that.data.OrderMessage.total_price}`,  // 弹窗的内容
      showCancel: true,  // 是否显示取消按钮，默认为 true
      cancelText: '取消',  // 取消按钮的文字
      confirmText: '支付',  // 确定按钮的文字
      success(res) {
        if (res.confirm) {
          let btn =1
          // 用户点击了确定
          console.log('用户点击了确定');
          that.wxpay()
          that.updataRoomStatus('booked')
          // 使用 setTimeout 实现2秒后跳转
          wx.showLoading({
            title: '加载中...',
            mask: true // 遮罩层，防止用户点击其它区域
          });
          setTimeout(() => {
            wx.hideLoading();// 隐藏 loading 提示框 
            wx.navigateTo({
              url: '/pageB/pages/loading/loading?btn='+btn+'&order_id='+that.data.order_id,
            });
          }, 2000);
          } else if (res.cancel) {
            // 用户点击了取消
            console.log('用户点击了取消');
            wx.switchTab({
              url: '/pages/me/me',
            })
          }
      },fail(err) {
        // 弹窗调用失败时的回调
        console.error('弹窗失败', err);
      }
      })
  },
  cancel:function(){
    var that =this
    wx.request({
      url: 'http://hotel.ttt:3007/protected/usedOrder',
      method: 'post',  // 请求方法是 GET
      header:{
        'Authorization': that.data.token// 将 token 添加到请求头
      },
      data:{
        payment_status:'failed',
        order_status:'cancelled',
         order_id:that.data.order_id
      },
      success: function (res) {
        that.updatePaymentStatus('failed')
        console.log(res.data.message)
        wx.switchTab({
          url: '/pages/index/index',
        })
      },
      fail: function (err) {
        console.error('请求失败:', err);
      }
    })
  },
  gotome:function(){
    wx.switchTab({
      url: '/pages/me/me',
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const openid=wx.getStorageSync('openid')
    let token=wx.getStorageSync('token')
    this.setData({
      btn:parseInt(options.btn),
      order_id:parseInt(options.order_id),
      token
    })
    this. getOrderMessage()
    this. getPaymentMessage()
    this.getDelayedTime();  // 页面加载时获取延后半小时的时间
    this.startCountdown();  // 页面加载时启动倒计时
    console.log(this.data.btn,this.data.order_id);
    this.getuserinfo(openid)
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    const openid=wx.getStorageSync('openid')
    this.getuserinfo(openid)
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    if (this.data.timer) {
      clearInterval(this.data.timer);
    }
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})